using System;

using Atomic.Structures;

namespace Atomic.Thermodynamics
{
	public interface IGibbsGrandPotential
	{
		/// <summary>
		/// The free energy (eV) as a function of temperature (K), pressure (eV/Å^3), and composition.
		/// </summary>
		double FreeEnergy(double temperature, double pressure, Composition composition);

		/// <summary>
		/// The volume (Å^3) given temperature (K), pressure (eV/Å^3, 1 eV/Å^3 = 160.2 GPa), and composition.
		/// </summary>
		double Volume(double temperature, double pressure, Composition composition);

		/// <summary>
		/// The chemical potential (eV) as a function of temperature (K), pressure (eV/Å^3), and composition.
		/// </summary>
		ChemicalPotential ChemicalPotential(double temperature, double pressure, Composition composition);

		/// <summary>
		/// The volumetric thermal expansion coefficient given temperature (K), pressure (eV/Å^3), and composition. This is defined as the volume multiplied by
		/// its derivative with respect to temperature.
		/// </summary>
		double VolumetricThermalExpansionCoefficient(double temperature, double pressure, Composition composition);

		IHelmholtzGrandPotential HelmholtzPotential
		{
			get;
		}
	}
}
